﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using CDefineGlobal;

namespace CObject
{
    public class AbstractTank : CObject
    {
        //Các thông tin chung của đối tượng tank
        private int i_HP;
        private int i_Life;
        private int i_Type;
        private int i_Speed;   //tốc độ di chuyển
        private int i_ToMove;  //hướng đi mà tank muốn di chuyển
        private int i_Direction;  //hướng mà tank đang nhìn
        private int i_XMove;
        private int i_YMove;

        private Point location;

        //bitmap để thể hiện hình ảnh đối tượng
        private Bitmap bUp;
        private Bitmap bDown;
        private Bitmap bLeft;
        private Bitmap bRight;
        private Bitmap bCurrentBitmap;

        public int I_Direction
        {
            get { return i_Direction; }
            set { i_Direction = value; }
        }

        public int I_XMove
        {
            get { return i_XMove; }
            set { i_XMove = value; }
        }

        public int I_YMove
        {
            get { return i_YMove; }
            set { i_YMove = value; }
        }

        public int I_ToMove
        {
            get { return i_ToMove; }
            set { i_ToMove = value; }
        }

        public int I_Life
        {
            get { return i_Life; }
            set { i_Life = value; }
        }

        public int I_HP
        {
            get { return i_HP; }
            set { i_HP = value; }
        }

        public int I_Type
        {
            get { return i_Type; }
            set { i_Type = value; }
        }

        public int I_Speed
        {
            get { return i_Speed; }
            set { i_Speed = value; }
        }

        public Bitmap BDown
        {
            get { return bDown; }
            set { bDown = value; }
        }

        public Bitmap BLeft
        {
            get { return bLeft; }
            set { bLeft = value; }
        }

        public Bitmap BRight
        {
            get { return bRight; }
            set { bRight = value; }
        }

        public Bitmap BUp
        {
            get { return bUp; }
            set { bUp = value; }
        }

        public Bitmap BCurrentBitmap
        {
            get { return bCurrentBitmap; }
            set { bCurrentBitmap = value; }
        }

        public Point Location
        {
            get { return location; }
            set { location = value; }
        }

        //bullet
        CNormalShot rocket;
        public CNormalShot Rocket
        {
            get { return rocket; }
            set { rocket = value; }
        }

        //thay đổi vị trí, cho tank tiến lên
        public void Move(int x, int y)
        {
            if (this.I_Direction == CDefine.DIRECTION_LEFT)
                this.BCurrentBitmap = this.BLeft;
            else if (this.I_Direction == CDefine.DIRECTION_RIGHT)
                this.BCurrentBitmap = this.BRight;
            else if (this.I_Direction == CDefine.DIRECTION_UP)
                this.BCurrentBitmap = this.BUp;
            else if (this.I_Direction == CDefine.DIRECTION_DOWN)
                this.BCurrentBitmap = this.BDown;

            this.ChangeLocation(x, y);
        }
        public void ChangeLocation(int x, int y) { this.Location = new Point(x, y); }

        public int XTopLeftCordinate() { return this.Location.X; }
        public int YTopLeftCordinate() { return this.Location.Y; }

        public void IncreaseHP(int iHP) { this.I_HP += iHP; }
        public void IncreaseLife(int iLife) { this.I_Life += iLife; }
        public void IncreaseSpeed(int iSpeed) { this.I_Speed += iSpeed; }
        public void MoveToDirection(int iDirection) { this.I_ToMove = iDirection; }
        public Rectangle GetRect()
        {
            return new Rectangle(this.Location, this.BUp.Size); //bitmap nào cũng được vì tất cả đều bằng nhau
        }

        public virtual void Fire() { }
        public virtual void CheckCollision() { }
        public virtual void ChangeBullet() { }
        public virtual void EatItem() { }

        //chuyển từ một picture box chưa được transparent sang một bitmap đã được transparent
        public Bitmap GetBitmapTransparent(Image img)
        {
            Bitmap b = new Bitmap(img);
            b.MakeTransparent(Color.Black);

            return b;
        }//end of func
    }
}
